package com.fg.pro.trade.entity;

import java.util.Date;

import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;

/**
 * 订单(TradeOrder)表实体类
 *
 * @author makejava
 * @since 2025-08-17 10:01:50
 */
@SuppressWarnings("serial")
@Data
public class TradeOrder extends Model<TradeOrder> {
    //主键
    private Long id;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date updateTime;
    //使用时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderUseTime;
    //收货时间/采购：采购时间/预计到货时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderReceiveTime;
    //订单：出库时间/采购：发货时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderOutstockTime;
    //下单时间
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderTime;
    //status	uint64	 bitmap，一些bool状态 2^8：是否冻结 2^9：是否打印 2^10：是否生成过出库单 2^11：是否完成了全部分拣任务 2^12：扫码回单 2^13：是否有组合商品 2^14：是否存在售后 用于判断展示图标 2^15：是否存在订单售后 用于判断整单是否可以修改 2^16：是否装车 2^17：是否存在仅退款的售后 2^18：是否存在退货退款的售后 2^19：是否打印配送单
    private Integer orderStatus;
    //版本号
    private Long orderRevision;
    //企业ID
    private Long orderGroupId;
    //站点ID
    private Long orderStationId;
    //创建人
    private Long orderCreatorId;
    //结款人
    private Long orderBillCustomerId;
    //配送司机id
    private Long orderDriverId;
    //收货人
    private Long orderReceiveCustomerId;
    //报价单id
    private Long orderQuotationId;
    //2,学生餐还是老师餐 1：表示虚拟的 customer，对用户不可见。比如用于承载个人的 customer 以及用于统计的 customer。 2：实体的社会餐饮类型（公司、店铺） 5：实体的学生餐饮类型（学校） 6：实体的学生餐饮类型（班级）
    private Integer orderCustomerType;
    //时间周期id
    private Long orderServicePeriodId;
    //下单金额，订单详情的order_price汇总
    private Double orderPrice;
    //售后金额，正负数，正数:补交，负数：退钱，异常单据的汇总（包含订单异常和商品异常）
    private Double orderAftersalePrice;
    //出库金额，订单详情的总出库金额
    private Double orderOutstockPrice;
    //售金额(也就是用户应付金额)（outstock_price+aftersale_price+coupon_price+freight_price+manual_adjust_price）
    private Double orderSalePrice;
    //不含税销售金额
    private Double orderSalePriceNoTax;
    //无售后销售金额(不减去售后金额)（sale_price+aftersale_price）
    private Double orderSalePriceNoAftersale;
    //订单详情的sale_price累加，冗余
    private Double orderDetailSumSalePrice;
    //订单详情的sale_price_no_tax累加，冗余
    private Double orderDetailSumSalePriceNoTax;
    //订单详情的税额tax_price累加，冗余
    private Double orderDetailSumTaxPrice;
    //加单总金额
    private Double orderTotalAddOrderPrice;
    //套账下单金额
    private Double orderFakeOrderPrice;
    //套账出库金额
    private Double orderFakeOutstockPrice;
    //套账打印金额, 统计需要打印的条目中的套账金额总和
    private Double orderFakePrintPrice;
    //累计支付金额
    private Double orderPaidAmount;
    //订单号
    private String orderSerialNo;
    //订单状态 1：待分拣 2：分拣中 3：配送中 4：已签收 11：分拣完成
    private Integer orderState;
    //1,订单支付状态 0：无特殊含义 1：未支付 2：部分支付 3：支付完成 4：已退款 5：已关闭 6：超额支付
    private Integer orderPayState;
    //订单类型 0：未使用 3：正常下的生产订单，用于采购、加工分拣的订单 4：从站点订单合并过来的生产订单，在站点与站点之间，流转的订单 6：学生餐 7：净菜菜谱 8：现场单(轻巧MES工位屏开单)跳过采购分拣流程
    private Integer orderType;
    //创建者用户类型 0：无特殊含义 1：bshop用户 2：station，ma用户 3：供应商用户（比如供应商协同会用到）
    private Integer orderCreatorIdType;
    //备注
    private String orderRemark;
    // 1,应用类型 0：无 1：station 2：bshop商城 3：cshop商城 4：eshop商城 5：命令行工具 6：boss 7：采购小程序 8：司机APP 9：工位屏 10：仓储PDA 100：轻巧版-采购小程序 101：轻巧版-收单小程序 102：供应商协同 200：轻巧版-商城 201：轻巧版-移动管理端 301：开放平台
    private Integer orderAppType;
    //是否真订单 1：是 2：否
    private Integer orderIsRealOrder;

    private Integer orderSortingTotalCount;
    //未称重任务数
    private Integer orderSortingUnweightCount;
    //缺货任务数
    private Integer orderSortingOutStockCount;
    //通过什么类型的操作来下的单 0：无特殊含义 1：正常下单 2：补录 3：手动创建 4：采购计划 5：采购申请单 6：订单复制 7：补采任务
    private Integer orderOp;
    //更新者用户类型 0：无特殊含义 1：bshop用户 2：station，ma用户 3：供应商用户（比如供应商协同会用到）
    private Integer orderUpdaterIdType;
    //客户层级1
    private Long orderCustomerFirId;
    //客户层级2
    private Long orderCustomerSecId;
    //方便搜索，如果这个订单所有商品都是仅供货=1，如果至少有一个商品为代分拣，且没有代配送的=2，如果至少有一个商品为代配送，且没有代分拣的=4，如果既有代分拣，又有代配送=6，三种都有=7
    private Integer orderSupplierCooperateModelType;
    //订单商品的数量
    private Integer orderDetailLength;
    //订单组合商品的数量
    private Integer orderRawDetailLength;
    //出库状态，全部出库才是已出库 0：无 1：待出库 2：部分出库 3：已出库
    private Integer orderOutstockState;
    //订单锁定状态，0：无 1：锁定 2：解锁
    private Integer orderLockState;
    //总加单数
    private Integer orderTotalAddOrderValueQuantity;
    //下单金额补差
    private Double orderExtraOrderPrice;
    //客户/收货人名称
    private String orderReceiveCustomerName;
    //参考成本
    private String orderCost;
    //风险类型：0-未检测，1-正常，2-异常
    private Integer orderRiskType;



    /**
     * 获取主键值
     *
     * @return 主键值
     */
    @Override
    public Serializable pkVal() {
        return this.id;
    }
}

